﻿using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Linq;
using STS.Model;
using System;

namespace STS.ViewModel
{
    public class BadaniaMoczViewModel : BaseViewModel
    {
        private ObservableCollection<BadaniaMocz> _badaniaMoczItems;
        public ObservableCollection<BadaniaMocz> BadaniaMoczItems
        {
            get
            {
                if (_badaniaMoczItems == null)
                {
                    _badaniaMoczItems = new ObservableCollection<BadaniaMocz>();
                }
                return _badaniaMoczItems;
            }
            set
            {
                _badaniaMoczItems = value;
                NotifyPropertyChanged("BadaniaMoczItems");
            }
        }

        public void FindBadaniaMoczItems()
        {
            var badaniaMoczDB = from badaniaMocz in ModelInstance.DataContext.BadaniaMoczItems
                           select badaniaMocz;
            BadaniaMoczItems = new ObservableCollection<BadaniaMocz>(badaniaMoczDB);
            Debug.WriteLine("Znalazłem BadaniaMocz, size = " + BadaniaMoczItems.Count);
        }

        public BadaniaMocz FindBadaniaMoczByIdBadaniaMocz(int badaniaMoczId)
        {
            var badaniaMoczDB = from badaniaMocz in ModelInstance.DataContext.BadaniaMoczItems
                           where badaniaMocz.IdMocz == badaniaMoczId
                           select badaniaMocz;
            return badaniaMoczDB.SingleOrDefault<BadaniaMocz>();
        }

        public void UpdateBadaniaMocz(BadaniaMocz updateBadaniaMocz)
        {
            BadaniaMocz old = FindBadaniaMoczByIdBadaniaMocz(updateBadaniaMocz.IdMocz);
            SetEntityPropertities(ref old, updateBadaniaMocz);
            SaveChangesToDB();
        }

        public void AddBadaniaMocz(BadaniaMocz badaniaMocz)
        {
            RemoveAllBadaniaMocz();
            ModelInstance.DataContext.BadaniaMoczItems.InsertOnSubmit(badaniaMocz);
            SaveChangesToDB();
            BadaniaMoczItems.Add(badaniaMocz);
        }

        public void RemoveBadaniaMocz(BadaniaMocz badaniaMocz)
        {
            BadaniaMoczItems.Remove(badaniaMocz);
            ModelInstance.DataContext.BadaniaMoczItems.DeleteOnSubmit(badaniaMocz);
            SaveChangesToDB();
        }

        public void RemoveAllBadaniaMocz()
        {
            var badaniaMoczDB = from badaniaMocz in ModelInstance.DataContext.BadaniaMoczItems
                           select badaniaMocz;

            foreach (BadaniaMocz _badaniaMocz in badaniaMoczDB)
            {
                ModelInstance.DataContext.BadaniaMoczItems.DeleteOnSubmit(_badaniaMocz);
            }

            try
            {
                SaveChangesToDB();
                BadaniaMoczItems.Clear();
            }
            catch (Exception e)
            {
                Debug.WriteLine(e);
            }
        }

    }
}
